/* 
 * File:   RedoCommand.cpp
 * Author: Gab'z
 * 
 * Created on 3 juin 2012, 20:13
 */

#include "RedoCommand.h"
#include "Command.h"
#include "model/Context.h"

namespace calculator {

    RedoCommand::RedoCommand(const std::string name) : Command(name) {
    }

    RedoCommand::RedoCommand(const RedoCommand& orig) : Command(orig._name) {
    }

    RedoCommand::~RedoCommand() {
    }

    RedoCommand* RedoCommand::clone() const {
        return new RedoCommand(_name);
    }

    std::string RedoCommand::isExecutable() const {
        // executable s'il existe un memento
        if (!Context::getInstance()->getMementoCaretaker()->hasNext()) return "No next memory";
        return "";
    }

    void RedoCommand::execute() const throw (CommandException) {
        if (!Context::getInstance()->getMementoCaretaker()->hasNext()) throw CommandException("No next memento");

        // en récupérer la commande
        // demander à la commande de s'executer avec son memento
        Context::getInstance()->getMementoCaretaker()->getNextMemento()->getUndoableRedoableCommand()->redo();
    }

}
